package net.feixiang.creational.singleton.staticClass;

/**
 * 静态内部类单例类。特点：结合懒加载与线程安全的优雅实现（推荐方案）。
 *
 * @see <a href="https://www.feixiang.net/Java%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%AC%AC%E4%B8%80%E7%AB%A0%E3%80%81%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/11.html">单例模式</a>
 * @author 飞翔
 */
public class StaticClassSingleton {
    /**
     * 私有构造函数
     * 作用：阻止外部通过 new 关键字创建实例
     */
    private StaticClassSingleton() {}

    /**
     * 静态内部类持有单例实例
     * 特性：内部类在第一次被访问时才会加载（实现延迟初始化）
     */
    private static class SingletonHolder {
        // JVM 保证类加载过程的线程安全性
        // static 确保实例唯一
        // final 确保实例不可变
        private static final StaticClassSingleton instance = new StaticClassSingleton();
    }

    /**
     * 获取单例实例的全局访问点
     * 优势：无需同步锁，兼顾性能与线程安全
     * @return 单例实例（延迟初始化）
     */
    public static StaticClassSingleton getInstance() {
        // 触发内部类加载（此时才会初始化实例）
        return SingletonHolder.instance;
    }

    /**
     * 示例业务方法
     */
    public void doSomething() {
        System.out.println("静态内部类单例模式：你好，飞翔！");
    }
}
